home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / linuxdoc-sgml-1.1 / sgmls-1.1 / etype.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  4.7 KB  |  92 lines

  1. /* ETYPE.H: Definitions for element type and group processing.
  2. */
  3. #define MCHARS    0x80        /* Model: contains #CHARS. */
  4. #define MGI       0x40        /* Model: contains GI names. */
  5. #define MPHRASE   0x20        /* Model: first token is #CHARS. */
  6. #define MKEYWORD  0x1F        /* Model: defined with single keyword. */
  7. #define MNONE     0x10        /* Model: contains no GIs or #CHARS. */
  8. #define MANY      0x08        /* Model: contains any GIs or #CHARS. */
  9. #define MRCDATA   0x04        /* Model: contains RCDATA. */
  10. #define MCDATA    0x02        /* Model: contains CDATA. */
  11.  
  12. #define TOREP (TOPT+TREP)     /* 11000000 Optional and repeatable. */
  13. #define TOPT      0x80        /* Token: 1=optional; 0=required. */
  14. #define TREP      0x40        /* Token: 1=repeatable; 0=not. */
  15. #define TXOREP (TXOPT+TXREP)  /* * explicitly specified */
  16. #define TXOPT     0x20          /* ? explicitly specified */
  17. #define TXREP     0x10          /* + explicitly specified */
  18. #define TTMASK    0x0F        /* 00001111 Mask for testing token type. */
  19. #define TTETD        4        /* 00000100 Token is an ETD. */
  20. #define TTAND        3        /* 00000011 Token is an AND group. */
  21. #define TTSEQ        2        /* 00000010 Token is a sequence group. */
  22. #define TTOR         1        /* 00000001 Token is an OR group. */
  23. #define TTCHARS      0        /* 00000000 Token is #CHARS. */
  24.  
  25. struct thdr {                 /* Token header or model header. */
  26.      UNCH ttype;              /* Token type attributes or model content. */
  27.      union {
  28.           int tnum;           /* Group token: tokens in group. 
  29.                  Model header: content tokens at any level. */
  30.           struct etd *thetd;  /* GI token: ptr to etd. */
  31.      } tu;
  32. };
  33. #define THSZ (sizeof(struct thdr))
  34.  
  35. #define ETDHASH   211          /* Size of element hash table. Must be prime. */
  36. #define SMO       0x40        /* ETDMIN: Start-tag O minimization. */
  37. #define EMO       0x04        /* ETDMIN: End-tag O minimization. */
  38. #define EMM       0x02          /* ETDMIN: End-tag minimization explicitly
  39.                  specified to be minus */
  40. #define ETDDCL    0x80        /* ETDMIN: Element was declared. */
  41. #define ETDUSED   0x20        /* ETDMIN: Element used in another declaration. */
  42. #define ETDOCC    0x10        /* ETDMIN: Element occurred in document. */
  43.  
  44. struct etd {                  /* Element type definition. */
  45.      struct etd *etdnext;     /* Next element type definition in hash chain. */
  46.      UNCH *etdgi;          /* GI preceded by its length, followed by EOS. */
  47.      UNCH etdmin;             /* Flag bits: minimization. */
  48.      UNCH mark;              /* Mark bit: for ambiguity checking */
  49.      struct thdr *etdmod;     /* Content model. */
  50.      struct etd **etdmex;     /* Minus exceptions. */
  51.      struct etd **etdpex;     /* Plus exceptions. */
  52.      struct ad *adl;          /* Attribute descriptor list. */
  53.      struct entity **etdsrm;  /* Short reference map. */
  54. };
  55. #define ETDSZ (sizeof(struct etd))
  56. typedef struct etd *PETD;
  57. extern struct etd dumetd[];
  58.  
  59. /* Number of bits in a long must be >= 1<<LONGPOW */
  60. #define LONGPOW 5
  61.  
  62. #define LONGBITS (1<<LONGPOW)
  63.  
  64. struct mpos {                 /* Position of current element in model. */
  65.      UNCH g;                  /* Index of this group in the model. */
  66.      UNCH t;                  /* Index of the current token in this group. */
  67.      unsigned long *h;          /* Hit bits of this group's tokens. */
  68. };
  69.  
  70. #define HITCLEAR(h) MEMZERO((UNIV)(h), grplongs*sizeof(unsigned long))
  71.  
  72. #define TAGCONER  0x01        /* 00000001 (contersw) Tag was out of context. */
  73. #define TAGNET    0x02        /* 00000010 (etisw)    Tag has NET enabled. */
  74. #define TAGPEX    0x04        /* 00000100 (pexsw)    Tag was plus exception. */
  75. #define TAGREF    0x08        /* 00001000 (conrefsw) Tag had CONREF or EMPTY.*/
  76. struct tag {                  /* Tag control block. */
  77.      UNCH   status;           /* Status of context check. */
  78.      UNCH   tflags;           /* Flags: TAGCONER TAGNET TAGPEX TAGREF */
  79.      struct etd *tetd;        /* Element type definition for tag. */
  80.      struct entity **tsrm;    /* Current short reference map. */
  81.      struct mpos *tpos;       /* Position of next tag in this model. */
  82. };
  83.  
  84. #define RCEND    1            /* No more tokens: end element and retry GI. */
  85. #define RCREQ    2            /* Required GI must precede proposed GI. */
  86. #define RCMISS   3            /* GI invalid: not element end; no required GI. */
  87. #define RCHIT    4            /* GI is the one expected next. */
  88. #define RCMEX    5            /* GI invalid: minus exception. */
  89. #define RCHITMEX 6            /* RCMEX with invalid attempted minus exclusion.*/
  90. #define RCPEX    7            /* GI is valid solely because of plus exclusion.*/
  91. #define RCNREQ   8            /* Token is not required; can retry invalid GI. */
  92.